#!/bin/bash

# jar包名，不用带后缀（.jar）
APP_NAME=auth-server
# 环境
PROFILES_ACTIVE=dev
# JVM 参数
JAVA_OPS="-Xms256m -Xmx256m"
# 端口
PORT=8089
# 基础路径
BASE_PATH=/apps
# 时间参数，年月日时分
DATE=$(date +%Y%m%d%H%M)

# 校验启动参数
if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|log} \033[0m"
    exit 1
fi

# 备份
function backup() {
    # 如果不存在，则无需备份
    echo "[backup] 开始备份: $APP_NAME"
    if [ ! -f "$BASE_PATH/$APP_NAME.jar" ]; then
        echo "[backup] 备份失败，没有bao: $BASE_PATH/$APP_NAME.jar"
    # 如果存在，则备份到 backup 目录下，使用时间作为后缀
    else
        cp $BASE_PATH/$APP_NAME.jar $BASE_PATH/backup/$APP_NAME-$DATE.jar
        echo "[backup] 备份成功: $APP_NAME"
    fi
}

# 开启服务
function start() {
  # 开启启动前，打印启动参数
  echo "[start] 开始启动: $BASE_PATH/$APP_NAME"
  echo "[start] 启动参数: $JAVA_OPS"
  echo "[start] 启动环境: $PROFILES_ACTIVE"
  echo "[start] 启动端口: $PORT"

  # 开始启动
  nohup java -Darms.licenseKey=dd0zv24ow2@979476a9596eac7 -Darms.appName=$APP_NAME -Dspring.profiles.active=$PROFILES_ACTIVE -Dserver.port=$PORT -jar $BASE_PATH/$APP_NAME.jar > nohup.out 2>&1 &

  echo "[start] 启动完成: $BASE_PATH/$APP_NAME"
}

# 停止服务
function stop() {
  echo "[stop] 开始关闭: $APP_NAME"
	PID=""
	query(){
		PID=`ps -ef |grep java|grep $APP_NAME.jar|grep -v grep|awk '{print $2}'`
	}

	query
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "[stop] 关闭中: $APP_NAME (pid:$PID)"
		while [ x"$PID" != x"" ]
		do
			sleep 1
			query
		done
		echo "[stop] 关闭成功: $APP_NAME"
	else
		echo "[stop] 关闭失败，未启动: $APP_NAME"
	fi
}

# 重启服务
function restart()
{
    stop
    sleep 3
    start
}

# 查询服务状态
function status()
{
    PID=`ps -ef |grep java|grep $APP_NAME.jar|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "运行中 $APP_NAME(pid:$PID)"
    else
        echo "已关闭 $APP_NAME"
    fi
}

# 查看日志
function log()
{
    tail -f nohup.out
}

# 部署
function deploy() {
    cd $BASE_PATH
    # 备份原 jar包
    backup
    # 停止 Java 服务
    stop
    # 睡眠3秒
    sleep 3
    # 启动 Java 服务
    start
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    log)
    log;;
    backup)
    backup;;
    deploy)
    deploy;;
    *)

esac
